# 线程就是执行python代码的一个分支，线程是cpu调度的基本单位 每个进程至少都有一个线程，常说的主线程
# 进程和线程的关系 进程包含线程
# GIL：全局解释器锁 不是python的特性，它是在实现python解析器（CPython）时所引入的一个概念

# 创建线程
# import time
# from threading import Thread
#
#
# def add(n):
#     """
#     把1 累加多少次
#     :param n:
#     :return:
#     """
#
#     sum = 0
#     while sum < n:
#         sum += 1
#     print(f'当前线程加了{sum}次')
#
#
# if __name__ == '__main__':
#     start = time.time()
#     n = 500000000
#     t1 = Thread(target=add, args=(n / 2,))
#     t2 = Thread(target=add, args=(n / 2,))
#     # t1.daemon = True # 守护线程
#     t1.start()
#     t2.start()
#
#     # t1.join()
#     # t2.join()
#
#     # add(n) # 单线程
#
#     end = time.time()
#
#     print(f'运行的时间 {end - start}')


# 使用面向对象的方式创建多线程

import time
from threading import Thread


class EatThread(Thread):

    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self) -> None:
        for i in range(6):
            print(f'进程{self.name}:正在吃饭....')
            time.sleep(0.3)


class WorkThread(Thread):

    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self) -> None:
        for i in range(6):
            print(f'进程{self.name}:正在工作')
            time.sleep(0.4)


if __name__ == '__main__':
    t1 = EatThread('t-1')
    t2 = WorkThread('t-2')

    t1.start()
    t2.start()
